package pe.gob.foncodes.ssa.web.controller;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;

import pe.gob.foncodes.ssa.bs.common.controller.GenericController;
import pe.gob.foncodes.ssa.bs.common.util.Constante;
import pe.gob.foncodes.ssa.bs.common.util.ServiceException;
import pe.gob.foncodes.ssa.bs.seguridad.domain.General;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Modulo;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Perfil;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Usuario;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Zonal;
import pe.gob.foncodes.ssa.web.beans.OpcionesModuloBean;
import pe.gob.foncodes.ssa.web.beans.UsuarioBean;
import pe.gob.foncodes.ssa.web.util.Impresion;

public class ReporteOpcionesModuloController extends GenericController {
    protected static Logger log = Logger.getLogger(ReporteOpcionesModuloController.class);
    
    private Long busModulo;
    private Long busPerfil;
    private java.util.Date busFechaDesde;
    
    private List<Perfil> lstPerfil;    
    private List<Modulo> lstModulo;
    private List<OpcionesModuloBean> lstOpcionesModulo;
    
    @Override
    public void init(){
        lstOpcionesModulo = new ArrayList<OpcionesModuloBean>();
        lstPerfil = new ArrayList<Perfil>();
    }

    @Override
    public void search(ActionEvent event) throws Exception{
        log.info("Ejecutando filtro reporte");
        
        List<Object[]> olstOpciones = getService().findByNamedQuery("Opcion.findByReporte",
                                                                                new Object[]{busModulo
                                                                                           , busPerfil
                                                                                           /*, fecDesde
                                                                                           , fecHasta*/});
        this.lstOpcionesModulo = new ArrayList<OpcionesModuloBean>();
        for(Object[] obj: olstOpciones){
            OpcionesModuloBean oOpciones = new OpcionesModuloBean();
            oOpciones.setTXT_MODULO((String)obj[0]);
            oOpciones.setTXT_PERFIL((String)obj[1]);
            oOpciones.setTXT_OPCION((String)obj[2]);
            oOpciones.setTXT_OPCIONPADRE((String)obj[3]);
            this.lstOpcionesModulo.add(oOpciones);
        }        
    }
    
    public void limpiar(){
        this.busPerfil=null;
        this.busModulo=null;
        this.lstPerfil = new ArrayList<Perfil>();
        this.lstOpcionesModulo = new ArrayList<OpcionesModuloBean>();    
    }
    
    public void print() {
        try {
            Collection col = new ArrayList();
            for (OpcionesModuloBean oOpcion : this.lstOpcionesModulo) {
                col.add(oOpcion);
            }
            Impresion imprimir = new Impresion();
            imprimir.imprimirListado("ssa_rpt_opciones_x_modulo", col);
        } catch (Exception ex) {
            log.error(ex);
        } finally {
            FacesContext.getCurrentInstance().responseComplete();
        }
    }
    
    public void llenarPerfil() throws ServiceException{
        log.info("Llenando perfiles por modulo");
        if(this.busModulo == null){
            this.lstPerfil = new ArrayList<Perfil>();
        }else{
            this.lstPerfil = getService().findByNamedQuery("Perfil.findByModulo",new Object[]{this.busModulo});
        }
    }
    
//    
//    @Override
//    public boolean validate() throws Exception{
//        boolean success = true;
//        
//        return success;
//    }

    public Date getBusFechaDesde() {
        return busFechaDesde;
    }

    public void setBusFechaDesde(Date busFechaDesde) {
        this.busFechaDesde = busFechaDesde;
    }

    public Long getBusModulo() {
        return busModulo;
    }

    public void setBusModulo(Long busModulo) {
        this.busModulo = busModulo;
    }

    public Long getBusPerfil() {
        return busPerfil;
    }

    public void setBusPerfil(Long busPerfil) {
        this.busPerfil = busPerfil;
    }

    public List<Modulo> getLstModulo() throws ServiceException {
        this.lstModulo = getService().findByNamedQuery("Modulo.findByFlgActivo",new Object[]{Constante.ESTADO_ACTIVO});
        return lstModulo;
    }

    public void setLstModulo(List<Modulo> lstModulo) {
        this.lstModulo = lstModulo;
    }

    public List<OpcionesModuloBean> getLstOpcionesModulo() {
        return lstOpcionesModulo;
    }

    public void setLstOpcionesModulo(List<OpcionesModuloBean> lstOpcionesModulo) {
        this.lstOpcionesModulo = lstOpcionesModulo;
    }

    public List<Perfil> getLstPerfil() {
        return lstPerfil;
    }

    public void setLstPerfil(List<Perfil> lstPerfil) {
        this.lstPerfil = lstPerfil;
    }    
}
